/**
 * 防抖函数
 * @param func 需要防抖的函数
 * @param delay 延迟时间(毫秒)
 * @returns 防抖处理后的函数
 */
export function debounce<T extends (...args: any[]) => any>(func: T, delay: number): (...args: Parameters<T>) => void {
    let timeoutId: NodeJS.Timeout | null = null

    return function (this: ThisParameterType<T>, ...args: Parameters<T>): void {
        // 如果已有计时器则清除
        if (timeoutId) {
            clearTimeout(timeoutId)
        }

        // 设置新的计时器
        timeoutId = setTimeout(() => {
            func.apply(this, args)
            timeoutId = null
        }, delay)
    }
}
